import java.util.*;
import javax.swing.*;
import org.apache.pdfbox.*;
import javax.swing.JComboBox;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.FlowLayout;
import javax.swing.JFrame;
import javax.swing.WindowConstants;

/**
 * Clase que se encarga de invocar a las demas clases
 * y realizar la organizacion de las tareas
 * 
 * @author dGomez / gMosca
 * @version 2.0
 */
public class Principal {
    //Nombre de los fomrularios que se van a procesar
    private static String formPDF = null;
    private static String formXML = null;
    private static Set<String> headerForm = null;
    private static Set<String> headerGrid = null;   
    public static void main(String[] args) {
         
         try{
            /*
             * Carga de las propiedades de la aplicacion como el diretorio de los
             * formularios y de cada uno de los pdf y xml de los mismos
             */
             DataUtils.execute();
             //Inicia la aplicacion y carga el combo
             Init init = new Init();         
             init.setVisible(true);
             init.setModal(true);
            
             JpdfForm frm = new JpdfForm(formPDF,formXML);
             frm.debug();
             frm.start();
             
             headerForm = new LinkedHashSet<String>();
             headerGrid = new LinkedHashSet<String>();

             //Obtengo los nombre de los campos que son header en el formulario
             headerForm = frm.getHeaderForm();
             
             //Completo los datos de la cabecera
            for(String hf : headerForm){              
                if(hf.startsWith("@")){
                   if(hf.contains("day")) {
                        frm.setFieldValue(hf, DataUtils.getDia());
                   }
                   
                   if(hf.contains("monthName")) {
                         frm.setFieldValue(hf, DataUtils.getMes());
                   }
                   
                   if(hf.contains("year")) {                        
                         frm.setFieldValue(hf, DataUtils.getAnio());
                   }
                } else{//No empieza con @
                    //Pido que ingrese el dato
                    
                    String seleccion = JOptionPane.showInputDialog(
                        null,null,
                        "Ingregse " + hf,
                        JOptionPane.INFORMATION_MESSAGE);
                    
                    //Envio a completar el pdf
                    //frm.setFieldValue(hf,"valor para: " + hf);
                    frm.setFieldValue(hf,seleccion);
                }   
            }
            
            if(frm.getRows() >0){
                //Obtengo los campos que son tutulos de las columnas
                headerGrid = frm.getHeaderGrid();            
                frm.first();//Posiciono en la primera posicion
                do{
                    for(String hg : headerGrid){
                        //System.out.print(hg + "\t");  
                       
                        
                        String seleccion = JOptionPane.showInputDialog(
                        null,null,
                        "Ingregse " + hg,
                        JOptionPane.INFORMATION_MESSAGE);                        
                                           
                       //Envio a completar el pdf
                       //frm.setFieldRowValue(hg,"valor para: " + hg);
                       frm.setFieldValue(hg,seleccion);
                    }
                    //System.out.println("Fila = " + frm.getRow());
                }while(frm.next()); //Recorro hasta que sea el final de grilla
                frm.preview();
            }else{
                System.out.println("NO HAY GRILLA");                
                frm.preview();                            
            } 
        }catch(Exception e){
            e.getStackTrace();
            e.printStackTrace();
            JOptionPane.showMessageDialog(null,"Error en Principal \n " + e.toString());
        }        
    }
     
    /**
     * Metodo que setea los postFijo con la extension del formulario del pdf
     */
    public static void setFormPDF(String n){
        formPDF = n + ".pdf";
    }
    
    /**
     * Metodo que setea los postFijo con la extension del formulario del xml
     */
    public static void setFormXML(String n){
        formXML = n + ".xml";
    }
 }